package swing;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.SQLException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.AbstractTableModel;
import javax.swing.JTextField;

import dao.FormateurDAO;
import modele.Formateur;

public class TableauFormateurs extends JPanel {
	private List<Formateur> liste;
	private FormateurDAO dao;
	private JTable tableau;
	private FormateursTableModele modele;
	private JLabel message;
	private JButton boutonAjouter;



	/**
	 * @return the modele
	 */
	public FormateursTableModele getModele() {
		return modele;
	}


	public TableauFormateurs() {
		setLayout(new BorderLayout());
		setBorder(BorderFactory.createTitledBorder("Formateurs"));
		message = new JLabel("Liste de formateurs");
		add(message, BorderLayout.NORTH);
		try {
			dao = new FormateurDAO();
			liste = dao.listerFormateur();
			modele = new FormateursTableModele();
			JTable tableau = new JTable(modele);
			JScrollPane scroll = new JScrollPane(tableau);
			scroll.setPreferredSize(new Dimension(800, 250));
			add(scroll, BorderLayout.CENTER);

		} catch (SQLException exc) {
			message.setText("<html><p>Problème de connexion à la base.<br/>Contactez l'administrateur</p></html>");
		}
	}

	public void update(){
		try {
			dao = new FormateurDAO();
			liste = dao.listerFormateur();
			modele = new FormateursTableModele();
			JTable tableau = new JTable(modele);
			JScrollPane scroll = new JScrollPane(tableau);
			scroll.setPreferredSize(new Dimension(800, 250));
			add(scroll, BorderLayout.CENTER);
		} catch (SQLException exc) {
			message.setText("<html><p>Problème de connexion à la base.<br/>Contactez l'administrateur</p></html>");
		}
	}

	public class FormateursTableModele extends AbstractTableModel {
		private final String[] entetes = { "id_personne", "nom", "prenom",
				"date_naissance", "telephone", "adresse", "code_postal",
				"ville", "email", "password", "diplome", "presentation",
		"url_photo" };

		public FormateursTableModele() {
			super();
		}

		@Override
		public int getColumnCount() {
			return entetes.length;
		}

		@Override
		public int getRowCount() {
			return liste.size();
		}

		public String getColumnName(int columnIndex) {
			return entetes[columnIndex];
		}

		public Object getValueAt(int rowIndex, int columnIndex) {
			switch (columnIndex) {
			case 0:
				return liste.get(rowIndex).getIdPersonne();
			case 1:
				return liste.get(rowIndex).getNom();
			case 2:
				return liste.get(rowIndex).getPrenom();
			case 3:
				return liste.get(rowIndex).getDate_naissance();
			case 4:
				return liste.get(rowIndex).getTelephone();
			case 5:
				return liste.get(rowIndex).getAdresse();
			case 6:
				return liste.get(rowIndex).getCode_postal();
			case 7:
				return liste.get(rowIndex).getVille();
			case 8:
				return liste.get(rowIndex).getEmail();
			case 9:
				return liste.get(rowIndex).getPassword();
			case 10:
				return liste.get(rowIndex).getDiplome();
			case 11:
				return liste.get(rowIndex).getPresentation();
			case 12:
				return liste.get(rowIndex).getUrlphoto();
			default:
				return null; // Ne devrait jamais arriver
			}
		}

		public void ajouter() {
			liste.add(new Formateur());
			modele.fireTableRowsInserted(liste.size() - 1, liste.size() - 1);
		}

		@Override
		public boolean isCellEditable(int x, int y) {
			return y != 0;
		}

		/** Seul le libelle peut etre change */
		@Override
		public void setValueAt(Object value, int rowIndex, int colIndex) {
			Formateur ligne = liste.get(rowIndex);
			// Modifier le modele en memoire
			switch (colIndex) {
			case 1:
				ligne.setNom(value.toString());
				break;
			case 2:
				ligne.setPrenom(value.toString());
				break;
			case 3:
				SimpleDateFormat df = new SimpleDateFormat("dd/mm/yyyy");
				java.util.Date date;
				try {
					date = df.parse(value.toString());
					ligne.setDate_naissance(new java.sql.Date(date.getTime()));
				} catch (ParseException e) {
					e.printStackTrace();
				}
				break;
			case 4:
				ligne.setTelephone(value.toString());
				break;
			case 5:
				ligne.setAdresse(value.toString());
				break;
			case 6:
				ligne.setCode_postal(value.toString());
				break;
			case 7:
				ligne.setVille(value.toString());
				break;
			case 8:
				ligne.setEmail(value.toString());
				break;
			case 9:
				ligne.setPassword(value.toString());
				break;
			case 10:
				ligne.setDiplome(value.toString());
				break;
			case 11:
				ligne.setPresentation(value.toString());
				break;
			case 12:
				ligne.setUrlphoto(value.toString());
				break;
			default:
				message.setText("Seul le libellé peut être modifié");
				break;
			}
			// Impacter la BD
			try {
				if (ligne.getIdPersonne() == 0) {
					dao.majFormateur(ligne);
				} else {
					dao.majFormateur(ligne);
				}
				fireTableRowsUpdated(rowIndex, rowIndex);
				message.setText("");
			} catch (SQLException exc) {
				message.setText(exc.getMessage());
			}
		}
	}

}
